/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.proyecto.managed;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import sv.com.intesal.clases.LimpiarManaged;
import sv.com.intesal.clases.Mensaje;
import sv.com.intesal.compra.bean.Material;
import sv.com.intesal.proyecto.bean.Proyecto;
import sv.com.intesal.proyecto.bean.UtilizacionProyecto;
import sv.com.intesal.proyecto.controlador.ProyectoControlador;
import sv.com.intesal.proyecto.controlador.UtilizacionProyectoControlador;
import sv.com.intesal.rrhh.bean.Empleado;
import sv.com.intesal.rrhh.controlador.EmpleadoControlador;
import sv.com.intesal.seguridad.controlador.SessionControlador;
import sv.com.intesal.seguridad.managed.SessionManaged;

/**
 *
 * @author ejerez
 */
@ManagedBean(name = "utilizacionProyectoManaged")
@ViewScoped
public class UtilizacionProyectoManaged implements Serializable {

    private Mensaje m;
    private SessionManaged sm;
    private Boolean flag_1;
    private Boolean flag_2;
    private Empleado selectedEmpleado;
    private Proyecto selectedProyecto;
    private Material selectedMaterial;
    /*ENCA*/
    private UtilizacionProyecto selectedEncaUtilizacionProyecto;

    /*DETA*/
    private List<UtilizacionProyecto> detaUtilizacionProyectos;
    private UtilizacionProyecto selectedDetaUtilizacionProyecto;

    public UtilizacionProyectoManaged() {

        this.m = new Mensaje();
        this.sm = new SessionManaged();

        this.flag_1 = true;
        this.flag_2 = false;

        selectedEmpleado = new Empleado();
        selectedProyecto = new Proyecto();
        selectedMaterial = new Material();

        selectedEncaUtilizacionProyecto = new UtilizacionProyecto();
        selectedDetaUtilizacionProyecto = new UtilizacionProyecto();

    }

    public void completeTransaction() {

        try {
            if (this.validar() == true) {
                if (this.selectedEncaUtilizacionProyecto.getId_up() == null) {
                    if (sm.validar_rol_usuario("wfrmUtilizacionProyecto", sm.agregar) == true) {
                        this.selectedEncaUtilizacionProyecto.setId_e(this.getSelectedEmpleado().getId_e());
                        this.selectedEncaUtilizacionProyecto.setId_p(this.getSelectedProyecto().getId_p());

                        UtilizacionProyectoControlador up = new UtilizacionProyectoControlador();
                        up.setEnca(this.selectedEncaUtilizacionProyecto, this.detaUtilizacionProyectos);

                        LimpiarManaged.limpiar();
                    }
                } else {
                    if (sm.validar_rol_usuario("wfrmUtilizacionProyecto", sm.modificar) == true) {

                        this.selectedEncaUtilizacionProyecto.setId_e(this.getSelectedEmpleado().getId_e());
                        this.selectedEncaUtilizacionProyecto.setId_p(this.getSelectedProyecto().getId_p());

                        UtilizacionProyectoControlador up = new UtilizacionProyectoControlador();
                        up.setEnca(this.selectedEncaUtilizacionProyecto, this.detaUtilizacionProyectos);

                        LimpiarManaged.limpiar();
                    }
                }

            }
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    public void eliminarRegistro() {
        try {
            if (this.selectedDetaUtilizacionProyecto == null) {
                m.messageError("DEBE ELEGIR UN REGISTRO PARA CONTINUAR");
            } else if (selectedDetaUtilizacionProyecto.getId_d() == 0) {
                this.detaUtilizacionProyectos.remove(selectedDetaUtilizacionProyecto);
                m.messageInfo(m.getIeliminada());
            } else {
                /*NO AFECTA INVENTARIO*/
                if (sm.validar_rol_usuario("wfrmUtilizacionProyecto", sm.eliminar) == true) {
                    UtilizacionProyectoControlador up = new UtilizacionProyectoControlador();

                    this.selectedDetaUtilizacionProyecto.setNumero_documento_up(this.selectedEncaUtilizacionProyecto.getNumero_documento_up());
                    this.selectedDetaUtilizacionProyecto.setId_up(this.selectedEncaUtilizacionProyecto.getId_up());

                    this.detaUtilizacionProyectos.remove(this.selectedDetaUtilizacionProyecto);
                    up.eliminarItem(this.selectedDetaUtilizacionProyecto);
                }
            }
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    public void getMaterial_Quick(Material ma) {

        try {
            this.selectedMaterial = ma;
            if (this.getSelectedMaterial() != null) {
                List<UtilizacionProyecto> lista = new ArrayList<UtilizacionProyecto>();
                if (this.detaUtilizacionProyectos != null) {
                    lista = this.detaUtilizacionProyectos;
                }

                UtilizacionProyecto up = new UtilizacionProyecto();
                up.setNombre_m(this.getSelectedMaterial().getNombre_m());
                up.setId_d(0);
                up.setId_dm(this.getSelectedMaterial().getId_dm());
                up.setCantidad_d(0.0);
                lista.add(up);
                this.setDetaUtilizacionProyectos(lista);
            }
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    private Boolean validar() throws Exception {

        try {
            Boolean value = true;
            if (this.getSelectedProyecto().getId_p() == null) {
                m.messageError("DEBE ELEGIR UN PROYECTO");
                value = false;
            }
            if (this.getSelectedEmpleado().getId_e() == null) {
                m.messageError("DEBE ELEGIR UN EMPLEADO");
                value = false;
            }

            if (this.getSelectedEncaUtilizacionProyecto().getFecha_up() == null) {
                m.messageAdvertencia(m.campoError("FECHA"));
                value = false;
            }

            if (this.getSelectedEncaUtilizacionProyecto().getObservacion_up() == "") {
                m.messageAdvertencia(m.campoError("OBSERVACION"));
                value = false;
            }
            if (this.getDetaUtilizacionProyectos() == null) {
                m.messageAdvertencia(m.campoError("MATERIALES"));
                value = false;
            } else if (this.getDetaUtilizacionProyectos().size() > 0) {
                for (int i = 0; i < this.getDetaUtilizacionProyectos().size(); i++) {
                    try {
                        if (this.getDetaUtilizacionProyectos().get(i).getCantidad_d() <= 0) {
                            m.messageAdvertencia("HAY CANTIDADES QUE NO SON ACEPTABLES");
                            value = false;
                            break;
                        }
                    } catch (Exception e) {
                        value = false;
                        break;
                    }
                }
            }

            return value;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void validarModificarProceso() {
        try {
            SessionControlador sc = new SessionControlador();
            if (sc.getCodigo_Proceso_Modificar() != 0) {
                this.flag_1 = false;
                this.flag_2 = true;
                this.getDatosModificarProceso(sc.getCodigo_Proceso_Modificar());
                sc.setCodigo_Proceso_Modificar(0);
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    private void getDatosModificarProceso(Integer codigo_sp) throws Exception {

        try {
            UtilizacionProyectoControlador up = new UtilizacionProyectoControlador();
            this.setSelectedEncaUtilizacionProyecto(up.getEnca(codigo_sp));

            ProyectoControlador pc = new ProyectoControlador();
            this.setSelectedProyecto(pc.getProyecto(this.getSelectedEncaUtilizacionProyecto().getId_p()));

            EmpleadoControlador ec = new EmpleadoControlador();
            this.setSelectedEmpleado(ec.getEmpleado(this.getSelectedEncaUtilizacionProyecto().getId_e()));

            this.setDetaUtilizacionProyectos(up.getDeta(this.getSelectedEncaUtilizacionProyecto().getId_up()));

        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void getProyecto_Quick(Proyecto p) {
        try {
            this.selectedProyecto = p;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void getEmpleado_Quick(Empleado em) {
        try {
            this.selectedEmpleado = em;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    /*

    SETTERS & GETTERS

     */
    public List<UtilizacionProyecto> getDetaUtilizacionProyectos() {
        return detaUtilizacionProyectos;
    }

    public void setDetaUtilizacionProyectos(List<UtilizacionProyecto> detaUtilizacionProyectos) {
        this.detaUtilizacionProyectos = detaUtilizacionProyectos;
    }

    public Boolean getFlag_1() {
        return flag_1;
    }

    public void setFlag_1(Boolean flag_1) {
        this.flag_1 = flag_1;
    }

    public Boolean getFlag_2() {
        return flag_2;
    }

    public void setFlag_2(Boolean flag_2) {
        this.flag_2 = flag_2;
    }

    public UtilizacionProyecto getSelectedDetaUtilizacionProyecto() {
        if (selectedDetaUtilizacionProyecto == null) {
            selectedDetaUtilizacionProyecto = new UtilizacionProyecto();
        }
        return selectedDetaUtilizacionProyecto;
    }

    public void setSelectedDetaUtilizacionProyecto(UtilizacionProyecto selectedDetaUtilizacionProyecto) {
        this.selectedDetaUtilizacionProyecto = selectedDetaUtilizacionProyecto;
    }

    public Empleado getSelectedEmpleado() {
        if (selectedEmpleado == null) {
            selectedEmpleado = new Empleado();
        }
        return selectedEmpleado;
    }

    public void setSelectedEmpleado(Empleado selectedEmpleado) {
        this.selectedEmpleado = selectedEmpleado;
    }

    public UtilizacionProyecto getSelectedEncaUtilizacionProyecto() {
        if (selectedEncaUtilizacionProyecto == null) {
            selectedEncaUtilizacionProyecto = new UtilizacionProyecto();
        }
        return selectedEncaUtilizacionProyecto;
    }

    public void setSelectedEncaUtilizacionProyecto(UtilizacionProyecto selectedEncaUtilizacionProyecto) {
        this.selectedEncaUtilizacionProyecto = selectedEncaUtilizacionProyecto;
    }

    public Material getSelectedMaterial() {
        if (selectedMaterial == null) {
            selectedMaterial = new Material();
        }
        return selectedMaterial;
    }

    public void setSelectedMaterial(Material selectedMaterial) {
        this.selectedMaterial = selectedMaterial;
    }

    public Proyecto getSelectedProyecto() {
        if (selectedProyecto == null) {
            selectedProyecto = new Proyecto();
        }
        return selectedProyecto;
    }

    public void setSelectedProyecto(Proyecto selectedProyecto) {
        this.selectedProyecto = selectedProyecto;
    }
}
